package com.garrett.demo.sys.dao;

import com.garrett.demo.sys.entity.Account;
import com.garrett.demo.sys.entity.SimsStudent;

import java.io.IOException;
import java.io.InputStream;
import java.sql.*;
import java.util.Properties;

public class UserDaoMysqlImp implements UserDao {

    private void propertiesConnectDemo() throws IOException {
        // 创建Properties类对象
        Properties properties = new Properties();

        // 读取properties属性文件到输入流中
        InputStream is = UserDaoMysqlImp.class.getResourceAsStream("/db.properties");

        // 从输入流中加载属性列表
        properties.load(is);

        // 获取properties文件中的属性值
        String url = properties.getProperty("url");
        String className = properties.getProperty("className");
        String name = properties.getProperty("name");
        String pwd = properties.getProperty("pwd");


        // 输出结果
        System.out.println("密码：" + pwd);
        System.out.println("数据库链接：" + url);

    }

    /**
     * 根据学号获取学生信息
     *
     * @param stuId 学号
     * @return 成功-用户信息 失败-null
     */
    @Override
    public SimsStudent getStudentById(String stuId) {

        SimsStudent stu = null;

        Connection conn = null;
        PreparedStatement st = null;
        ResultSet rs = null;

        //1.加载驱动(开发推荐的方式)
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");

            // 如果连接的 SQLServer，自行下载jar包依赖
            // 1.加载驱动
            // Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");

            // 你的数据源地址+数据库名称
            String url = "jdbc:mysql://localhost:3306/shen";
            // 你的数据库登录用户名
            String username = "shen";
            // 你的数据库登录密码
            String password = "Anxin062039";

            //2.获取与数据库的链接
            conn = DriverManager.getConnection(url, username, password);

            // ?字符表示占位符，代表后续程序要在此进行填充
            String sql = "select * from users where username=? and password=?";

            //3.获取用于向数据库发送sql语句的Preperedstatement
            st = conn.prepareStatement(sql);
            //在此次传入，进行预编译   ------------ 填充
            st.setString(1, username);
            st.setString(2, password);
            
            //4.向数据库发sql
            rs = st.executeQuery();//在这里不需要传入sql
            stu = new SimsStudent();
            //5.读取结果，循环取出(id)
            while(rs.next())
            {
                String id=rs.getString(1);//1代表数据库中表的列数，id在第一列也可以("id")！！！
                System.out.println(id+" ");
                stu.setStudentId(id);
            }

        } catch (ClassNotFoundException | SQLException e) {
            e.printStackTrace();
        } finally {

            //6.关闭链接，释放资源
            if (rs != null) {
                try {
                    rs.close();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
            if (st != null) {
                try {
                    st.close();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
            if (conn != null) {
                try {
                    conn.close();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
        return stu;
    }

    /**
     * 根据登录账号获取账户资源信息
     *
     * @param account 账户名
     * @return 成功-账户信息 失败-null
     */
    @Override
    public Account getUserByAccount(String account) {
        return null;
    }

    /**
     * 注册账户信息
     *
     * @param account 账户
     * @return 1-成功插入一条数据 0-数据创建失败
     */
    @Override
    public int addAccount(Account account) {
        return 0;
    }

    /**
     * 删除账户
     *
     * @param id 主键id - 不是学号
     * @return 1-成功 0-失败
     */
    @Override
    public int delAccountById(String id) {
        return 0;
    }

    /**
     * 修改账户信息
     *
     * @param account 主键id不可改变，根据主键id判断修改。
     *                <p>例子：{id:23,account:212006677,password:admin}</p>
     *                <p>根据id判断数组中是否存在对应id值，如存在则可以修改学号和密码，否则无效修改</p>
     * @return 1-成功 0-失败
     */
    @Override
    public int modifyAccount(Account account) {
        return 0;
    }

    /**
     * 添加用户信息
     *
     * @param userInfo 用户信息
     * @return 1-成功插入一条数据 0-数据创建失败
     */
    @Override
    public int createUser(SimsStudent userInfo) {
        return 0;
    }

    /**
     * 删除学生信息
     *
     * @param stuId 学号
     * @return
     */
    @Override
    public int delStudentInfo(String stuId) {
        return 0;
    }

    /**
     * 修改学生信息
     *
     * <p>studentId(学号)不可改变，根据主键studentId判断修改</p>
     * <p>例子：{studentId:212006677,studentName:garrett,email:null}</p>
     * <p>根据studentId判断数组中是否存在对应学号，如存在则可以修改除学号以外的对应属性值，否则无效修改</p>
     *
     * @param student 学生信息
     * @return 1-成功 0-失败
     */
    @Override
    public int modifyStudentInfo(SimsStudent student) {
        return 0;
    }

    /**
     * 获取所有学生信息
     *
     * @return 学生信息列表
     */
    @Override
    public SimsStudent[] getAllStudent() {
        return new SimsStudent[0];
    }
}
